/**
 * @file menuDemo.c
 * @author your name (you@domain.com)
 * @brief
 * 实验题目1
 * 模拟一个命令控制台下的菜单
 * 1.随机生成一个数组
 * 2.数组清零
 * 3.数组打印
 * 4.退出
 * 请依次实现1~3的具体功能
 * @version 0.1
 * @date 2022-11-23
 *
 * @copyright Copyright (c) 2022
 *
 */
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 7
void showArray(int arr[N])//通过数组名做形参数来实现
{
    int *ptr;
    for(ptr=arr;ptr<(arr+N);ptr++)
    {
        printf("%d ",*ptr);
    }
    printf("\n");
}
void clearArray(int a[N])//清零数组
{
    //方法1 将数组中每个元素都赋0
    /* int *p;
    for(p=a;p<(a+N);p++)
    {
        *p=0;
    } */
    //方法2 memset()函数
    memset(a,0,N*4);

}
/**
 * @brief 2022.11.24 上机思考一
 * 上面的showArray函数能否使用指针作为形参名来实现？
 * 数组的长度能不能动态获取(不指定为N)
 * 依据以上思考，设计并实现函数showArrayPtr
 * 形成实验报告并说明详细理由
 * 上交截止时间 2022.12.11
 * @return void 
 */
//void showArrayPtr();

/**
 * @brief 上机思考二 能否加入新的功能，对随机生成的数组按照升序或降序排序？
 * 请给出合理的算法并解释原因
 * 升序和降序通过选项来控制
 * 根据上述思想设计并实现一个函数
 * void sortArray(int *ptr,char opt)
 * opt='a'->升序(从小到大)
 * opt='d'->降序(从大到小)
 * 上交截止时间 2022.12.11
 * @return  
 */

int main()
{
    int opt = -1;
    int data[N] = {0};
    int i = 0;
    while (opt != 0)
    {
        printf("---------------------------------\n");
        printf("      0------退出程序\n");
        printf("      1------生成随机数组\n");
        printf("      2------清0随机数组\n");
        printf("      3------显示数组元素\n");
        printf("      4------排序数组元素\n");
        printf("---------------------------------\n");
        printf("请选择:\n");
        scanf("%d", &opt);

        switch (opt)
        {
        case 0:
            printf("程序已退出！\n");
            break;
        case 1://功能1
            //生成随机数，使用系统的内置时间作为种子生成
            srand((unsigned)time(0));
            for(i=0;i<N;i++)
            {
                //生成数范围0~100以内
                data[i]=rand()%100;
            }
            printf("随机数生成完成!\n");
            break;
        case 2:
            //调用函数清零
            clearArray(data);
            printf("数组清零完毕\n");
            break;
        case 3://功能3
        //显示整个数组
        showArray(data);
        //showArrayPtr();
        break;
        case 4:
        break;
        default:
            break;
        }
    }
    return 0;
}